﻿//начало текста модуля
&НаКлиенте
Перем Ванесса;

&НаКлиенте
// Структура, в которой хранится состояние сценария между выполнением шагов. Очищается перед выполнением каждого сценария.
Перем Контекст Экспорт;
 
&НаКлиенте
// Структура, в которой можно хранить служебные данные между запусками сценариев. Существует, пока открыта форма Vanessa-Behavior.
Перем КонтекстСохраняемый Экспорт;


&НаКлиенте
Функция ДобавитьШагВМассивТестов(МассивТестов,Снипет,ИмяПроцедуры,ПредставлениеТеста = Неопределено,Транзакция = Неопределено,Параметр = Неопределено)
	Структура = Новый Структура;
	Структура.Вставить("Снипет",Снипет);
	Структура.Вставить("ИмяПроцедуры",ИмяПроцедуры);
	Структура.Вставить("ИмяПроцедуры",ИмяПроцедуры);
	Структура.Вставить("ПредставлениеТеста",ПредставлениеТеста);
	Структура.Вставить("Транзакция",Транзакция);
	Структура.Вставить("Параметр",Параметр);
	МассивТестов.Добавить(Структура);
КонецФункции

&НаКлиенте
Функция ПолучитьСписокТестов(КонтекстФреймворкаBDD) Экспорт
	Ванесса = КонтекстФреймворкаBDD;
	
	ВсеТесты = Новый Массив;

	//описание параметров
	//ДобавитьШагВМассивТестов(ВсеТесты,Снипет,ИмяПроцедуры,ПредставлениеТеста,Транзакция,Параметр);

	ДобавитьШагВМассивТестов(ВсеТесты,"ЯОткрылФормуVanessaBehavoirВРежимеСамотестирования()","ЯОткрылФормуVanessaBehavoirВРежимеСамотестирования","я открыл форму VanessaBehavoir в режиме самотестирования");
	ДобавитьШагВМассивТестов(ВсеТесты,"ЯЗагрузилСпециальнуюТестовуюФичу(Парам01Строка)","ЯЗагрузилСпециальнуюТестовуюФичу","Я загрузил специальную тестовую фичу ""ОсновнаяТестоваяФича""");
	ДобавитьШагВМассивТестов(ВсеТесты,"ДеревоТестовЗаполнилосьСтрокамиИзФичи()","ДеревоТестовЗаполнилосьСтрокамиИзФичи","ДеревоТестов заполнилось строками из фичи");

	Возврат ВсеТесты;
КонецФункции

&НаКлиенте
Процедура ПередНачаломСценария() Экспорт
КонецПроцедуры

&НаКлиенте
Процедура ПередОкончаниемСценария() Экспорт
	//безусловное закрытие формы если она осталась
	Попытка
	    ОткрытаяФормаVanessaBehavoir = Контекст.ОткрытаяФормаVanessaBehavoir;
		ОткрытаяФормаVanessaBehavoir.Закрыть();
	Исключение
		
	КонецПопытки;
КонецПроцедуры


&НаКлиенте
//я открыл форму VanessaBehavoir в режиме самотестирования
//@ЯОткрылФормуVanessaBehavoirВРежимеСамотестирования()
Процедура ЯОткрылФормуVanessaBehavoirВРежимеСамотестирования() Экспорт
	ПутьКОбработке = Ванесса.Объект.КаталогИнструментов + "\vanessa-behavior.epf";
	Если НЕ Ванесса.ЕстьПоддержкаАсинхронныхВызовов Тогда
		Файл = Новый Файл(ПутьКОбработке);
		Ванесса.ПроверитьРавенство(Файл.Существует(),Истина,"Существует файл vanessa-behavior.epf");
	КонецЕсли;	 
	
	
	ИмяОбработки = Ванесса.ПодключитьВнешнююОбработкуКлиент(ПутьКОбработке);
	ФормаОбработки = ПолучитьФорму("ВнешняяОбработка." + ИмяОбработки + ".Форма.УправляемаяФорма",,,Истина);
	Ванесса.ПроверитьНеРавенство(ФормаОбработки.Открыта(),Истина,"Форма обработки должна быть закрыта.");
	
	ФормаОбработки.Объект.РежимСамотестирования = Истина;
	ФормаОбработки.Объект.DebugLog = Истина; //режим самотестирования удобен при полном консольном выводе в режиме отладки
	ФормаОбработки.ХостСистема = Ванесса;
	ФормаОбработки.Открыть();
	
	Ванесса.ПроверитьРавенство(ФормаОбработки.Открыта(),Истина,"Форма обработки должна открыться.");
	
	Контекст.Вставить("ОткрытаяФормаVanessaBehavoir",ФормаОбработки);
	
КонецПроцедуры


&НаКлиенте
Процедура СделатьЗагрзукуФичВОткрытойФорме()
	ОткрытаяФормаVanessaBehavoir                   = Контекст.ОткрытаяФормаVanessaBehavoir;
	ОткрытаяФормаVanessaBehavoir.Объект.КаталогФич = Контекст.ПутьКФиче;
	ОткрытаяФормаVanessaBehavoir.ЗагрузитьФичи();
КонецПроцедуры

&НаКлиенте
Процедура ОбработчикНачатьПроверкуСуществования(Существует,ДополнительныеПараметры) Экспорт
	Если НЕ Существует Тогда
		ВызватьИсключение "Файл " + Контекст.ПутьКФиче + " не существует!";
	КонецЕсли;	 
	СделатьЗагрзукуФичВОткрытойФорме();
	Ванесса.ПродолжитьВыполнениеШагов();
КонецПроцедуры


&НаКлиенте
//Я загрузил специальную тестовую фичу "ОсновнаяТестоваяФича"
//@ЯЗагрузилСпециальнуюТестовуюФичу(Парам01Строка)
Процедура ЯЗагрузилСпециальнуюТестовуюФичу(ИмяФичи) Экспорт
	Контекст.Вставить("ИмяТестовойФичи",ИмяФичи);
	
	ОткрытаяФормаVanessaBehavoir            = Контекст.ОткрытаяФормаVanessaBehavoir;
	ПутьКФиче = ОткрытаяФормаVanessaBehavoir.Объект.КаталогИнструментов + "\features\Support\Templates\" + ИмяФичи + ".feature";
	Контекст.Вставить("ПутьКФиче",ПутьКФиче);
	
	
	Если НЕ Ванесса.ЕстьПоддержкаАсинхронныхВызовов Тогда
		ФайлПроверкаСуществования = Новый Файл(ПутьКФиче);
		Если НЕ ФайлПроверкаСуществования.Существует() Тогда
			ВызватьИсключение "Файл " + ПутьКФиче + " не существует!";
		КонецЕсли;	 
		СделатьЗагрзукуФичВОткрытойФорме();
	Иначе
		Ванесса.ЗапретитьВыполнениеШагов();
		Файл = Новый Файл(ПутьКФиче);
		ДополнительныеПараметры = Неопределено;
		ОписаниеОповещения = Вычислить("Новый ОписаниеОповещения(""ОбработчикНачатьПроверкуСуществования"",ЭтаФорма,ДополнительныеПараметры)");
		Выполнить("Файл.НачатьПроверкуСуществования(ОписаниеОповещения)");
	КонецЕсли;	 
КонецПроцедуры

&НаКлиенте
//ДеревоТестов заполнилось строками из фичи
//@ДеревоТестовЗаполнилосьСтрокамиИзФичи()
Процедура ДеревоТестовЗаполнилосьСтрокамиИзФичи() Экспорт
	ОткрытаяФормаVanessaBehavoir = Контекст.ОткрытаяФормаVanessaBehavoir;
	
	ЭлементыДерева = ОткрытаяФормаVanessaBehavoir.Объект.ДеревоТестов.ПолучитьЭлементы();
	
	Ванесса.ПроверитьНеРавенство(ЭлементыДерева.Количество(),0,"В дереве тестов на первом уровне должны быть строки.");
	
	ЭлементыДерева = ЭлементыДерева[0].ПолучитьЭлементы();
	Ванесса.ПроверитьНеРавенство(ЭлементыДерева.Количество(),0,"В дереве тестов на втором уровне должны быть строки.");
КонецПроцедуры

//окончание текста модуля